package listaSimples;

/**
 * Interface que representa uma lista. A ideia eh implementar a estrutura 
 * de forma recursiva.
 * @author betinho
 *
 */
public interface ListaInteiros {
	/**
	 * Mensagem usada nas excecoes de elemento inexistente.
	 */
	public static final String MSG_INEXISTENTE = "Elemento Inexistente";
	
	
	/**
	 * Diz se a lista eh vazia ou nao.
	 * @return
	 */
	public boolean isEmpty();
	
	/**
	 * Retorna o tamanho da lista.
	 * @return
	 */
	public int tamanho();
	
	/**
	 * Insere um elemento na lista.
	 * @param numero
	 */
	public void inserir(int numero);
	
	/**
	 * Procura um elemento na lista retornando-o em seguida. Se o elemento nao 
	 * existe, retorna uma RuntimeException com a mensagem dada pela constante
	 * MSG_INEXISTENTE.
	 * @param numero
	 * @return
	 */
	public int procurar(int numero);
	
	/**
	 * Remove um elemento na lista. Se o elemento nao esta na lista 
	 * retorna uma RuntimeException com a mensagem dada pela constante
	 * MSG_INEXISTENTE.
	 * @param numero
	 */
	public void remover(int numero);
	
	/**
	 * Metodo que inverte uma lista de inteiros.
	 * @return
	 */
	public ListaInteiros revert();
	
	/**
	 * Metodo que retorna o maior valor de uma lista. Se a lista for vazia, 
	 * o metodo retorna Integer.MIN_VALUE.
	 * seja vazia.
	 * @return
	 */
	public int maior();
	
	/**
	 * Metodo que retorna o menor valor de uma lista. Se a lista for vazia, 
	 * o metodo retorna Integer.MAX_VALUE.
	 * seja vazia.
	 * @return
	 */
	public int menor();
}
